#include "../include/PNJ.h"

#include <iostream>
#include <stdlib.h>

PNJ::PNJ(Carte* p_carte)
{
    carte = p_carte;

    position_x = 6;
    position_y = 10;

    mouvement_x = 0;
    mouvement_y = 0;

    num_sprite = 0;
    pas = 1;
    sens = 1;
    sprite[num_sprite].SetPosition(position_x*50+5, position_y*50);
}

PNJ::~PNJ()
{
    //dtor
}

void PNJ::se_deplace()
{
    if ( position_x <= 6)
    {
        mouvement_x = 1;
        num_sprite = 7;
        pas = 1;
        sens = 1;
    }
    if ( position_x >= 12)
    {
        mouvement_x = -1;
        num_sprite = 4;
        pas = 1;
        sens = 1;
    }

    if( (*carte).case_franchissable(position_x+mouvement_x,position_y+mouvement_y) )
    {
        int ralentissement = 5;
        position_x += 0.25f * mouvement_x / ralentissement;
        position_y += 0.25f * mouvement_y / ralentissement;

        if (pas%(2*ralentissement) == 0)
            { sens *= -1; }
        if (pas%ralentissement == 0)
            { num_sprite += sens;}
        pas ++;
        sprite[num_sprite].SetPosition(position_x*50+5, position_y*50);
        if (num_sprite < 3 || num_sprite > 8) { std::cout << "Erreur ! Pas :" << pas << std::endl; }
    }
    else
    {
        mouvement_x *= -1;
    }
}

sf::Sprite PNJ::recup_sprite()
{
    return sprite[num_sprite];
}

void PNJ::charge_sprite()
{
    // On va maintenant s'occuper d'initialiser l'image les Sprites du personnage
    if (!image.LoadFromFile("data/SpriteSheet/spriteMarchand.png"))
    {
        std::cout << "ERREUR LORS DU CHARGEMENT DU PNJ";
    }

    int f_compteur = 0;
    int f_taille_x = image.GetHeight()/4;
    int f_taille_y = image.GetWidth()/3;

    for (int i=0; i < 4; i++)
    {
        for (int j=0; j < 3; j++)
        {
            sprite[f_compteur].SetImage(image);
            sprite[f_compteur].SetSubRect(sf::IntRect(j*f_taille_x, i*f_taille_y,
                                                      (j+1)*f_taille_x, (i+1)*f_taille_y) );
            sprite[f_compteur].Resize(40.f,45.f);
            f_compteur ++;
       }
   }
}
